x264.c中取后缀的代码,终于看明白了
#include "stdafx.h"
#include <string.h>
#include <iostream.h>
int main(int argc, char* argv[])
{
/*
char *psz_filename = NULL;
char *psz;
psz_filename = "abc.avi";
psz = psz_filename + strlen(psz_filename) - 1;
printf("psz_filename = %s\n",psz_filename);
printf("psz = %s\n",psz);
printf("-------------------------\n");
while( psz > psz_filename && *psz != '.' )
{
//printf("psz = %s\n",psz);
psz--;
printf("psz = %s\n",psz);
}
printf("-------------------------\n");
printf("psz = %s\n",psz);
printf("-------------------------\n");
*/
char *tmp1 = NULL;
char *tmp;
tmp1 = "abcdefg.yuv";
tmp = tmp1 + strlen(tmp1) - 1; //这是内存地址的运算
//把指针移到最后一个字符'v'处
cout<<"tmp1 = " <<tmp1 <<"\n";
cout<<"tmp = " <<tmp <<"\n";
cout<<"*tmp1 = " <<*tmp1<<"\n";
cout<<"-------------------------------------------------------"<<"\n\n\n";
cout<<"指针 "<<"值(地址)" <<" *(tmp-n)" <<"\n";
cout<<"\n";
cout<<"tmp1 : "<<&tmp1<<"\n";
cout<<"tmp : "<<&tmp << " " << *(tmp-0) <<"\n";
cout<<"\n";
cout<<"&tmp-1 : "<< &tmp-1 << " " << *(tmp-1 ) <<"\n";
cout<<"&tmp-2 : "<< &tmp-2 << " " << *(tmp-2 ) <<"\n";
cout<<"&tmp-3 : "<< &tmp-3 << " " << *(tmp-3 ) <<"\n";
cout<<"&tmp-4 : "<< &tmp-4 << " " << *(tmp-4 ) <<"\n";
cout<<"&tmp-5 : "<< &tmp-5 << " " << *(tmp-5 ) <<"\n";
cout<<"&tmp-6 : "<< &tmp-6 << " " << *(tmp-6 ) <<"\n";
cout<<"&tmp-7 : "<< &tmp-7 << " " << *(tmp-7 ) <<"\n";
cout<<"&tmp-8 : "<< &tmp-8 << " " << *(tmp-8 ) <<"\n";
cout<<"&tmp-9 : "<< &tmp-9 << " " << *(tmp-9 ) <<"\n";
cout<<"&tmp-10 : "<< &tmp-10 << " " << *(tmp-10) <<"\n";
cout<<"&tmp-11 : "<< &tmp-11 << " " << *(tmp-11) <<"\n";
cout<<"-------------------------------------------------------"<<"\n\n\n";
cout<<"*tmp : "<<*tmp <<"\n";//此时tmp指向'v'
cout<<"tmp-1 : "<< tmp-1 <<"\n";//此时tmp指向'v'
cout<<"tmp-2 : "<< tmp-2 <<"\n";//此时tmp指向'v'
cout<<"tmp-3 : "<< tmp-3 <<"\n";//此时tmp指向'v'
cout<<"tmp-4 : "<< tmp-4 <<"\n";//此时tmp指向'v'
cout<<"tmp-5 : "<< tmp-5 <<"\n";//此时tmp指向'v'
cout<<"tmp-6 : "<< tmp-6 <<"\n";//此时tmp指向'v'
cout<<"tmp-7 : "<< tmp-7 <<"\n";//此时tmp指向'v'
cout<<"tmp-8 : "<< tmp-8 <<"\n";//此时tmp指向'v'
cout<<"tmp-9 : "<< tmp-9 <<"\n";//此时tmp指向'v'
cout<<"tmp-10 : "<< tmp-10 <<"\n";//此时tmp指向'v'
cout<<"tmp-11 : "<< tmp-11 <<"\n";//此时输出空
cout<<"-------------------------------------------------------"<<"\n\n\n";
char *tmp0;
while (tmp > tmp1 && *tmp != '.') /* “*tmp”是取值,tmp是指针,*tmp只代表一个字符 */
{
cout<<"*tmp :"<< *tmp <<"\n"; /* 此时tmp指向最后一个字符v */
tmp0 = tmp--;
cout<<" tmp0的内存地址:"<<&tmp0<<"\n";
}
char * t = "\
此例子证明了以下内容:\n\
打印一个char * 变量,它是按字符串输出的,如上面的: \
\n cout << \"tmp1 = \" << tmp1; //abcdefg.yuv\
\n如果把这个char * 变量当成地址,用*取值,仅能输出一个字符,如上面的: \
\n cout << \"*tmp1 = \" << *tmp1; //a";
cout << t << "\n";
//printf("%s\n",tmp);
//printf("Hello World!\n");
return 0;
}
运行结果: