1·非常量数据的非常量指针
定义:int *ptr;
举例说明:
#include <stdio.h>
//非常量数据的非常量指针指向的内存地址和存储的内容都可以改变!
int main()
{
int a = 100;
int b = 200;
int *ptr = &a ;
*ptr = b; //合法
ptr = &b; //合法
return 0;
}
2·常量数据的非常量指针
定义:const int *ptr;
举例说明:
#include <stdio.h>
//常量数据的非常量指针指向的内存地址可以改变但是存储的内容不可以改变!
int main()
{
const int a = 100;//定义一个常量数据
int b = 200;
const int *ptr = &a ;//指向一个常量数据的非常量指针
//这时候表示指针指向的内存地址可以改变,但是地址里面储存的内容不能改变!
ptr = &b; //合法
*ptr = b; //非法!
//VC++6.0编译结果:error C2166: l-value specifies const object
//把光标移到编译这条编译信息里,按F1,可以看看MSDN关于这条编译错误的定义
return 0;
}
3·非常量数据的常量指针
定义:int * const ptr;
举例说明:
#include <stdio.h>
//非常量数据的常量指针指向的内存地址不可以改变但是存储的内容可以!
int main()
{
int a = 100;
int b = 200;
int * const ptr = &a;//这里一旦指向一个固定的地址以后就不可以再改变了
//但是地址里面存放的内容依然可以改变
ptr = &b; //非法!
*ptr = b; //合法
return 0;
}
4·常量数据的常量指针
定义:const int * const ptr;
举例说明:
#include <stdio.h>
//常量数据的常量指针指向的内存地址和存储的内容都不可改变!
int main()
{
const int a = 100;
int b = 200;
const int * const ptr = &a;
ptr = &b; //非法!
*ptr = b; //非法!
return 0;
}
以上代码均在VC++6.0上测试过。
注意:可能有些编译器不支持const!
关于指针的问题?
悬赏分:10 - 解决时间:2007-12-7 09:35
const char *const *argv
argv是一个什么样的数据类型。请详细说明上面类型的定义!谢谢!
提问者: Jeffguo - 初学弟子 一级
最佳答案
const ( char ( * const ( * argv ) ) )
argv是一个指向指针的指针,指针所指向的内容不能被修改,而所指向的内容也是个指针,这个指针所指向的内容也不能被修改。
从里往外说:*argv,定义argv是个指针,外面有const修饰,则*argv是被限定了,无法修改,(如argv=A,A 是个数组,那么无法通过用*argv引用来修改数组的内容的),再外面,* 说明*argv也是个指针,再再外面 char 说明,指针*argv 指向一个字符型变量,再再再外面 const 说明 **argv 是被限定了的,无法修改。(如*argv=A,A 是个数组,那么无法通过用**argv引用来修改数组的内容的)。
也就是说了
可以 argv = xxx;
但不能 *argv = xxx;
也不能 **argv = xxx;
回答者:摇摆的记忆 - 秀才 二级 11-28 15:27
您觉得最佳答案好不好? 目前有 0 个人评价
50% (0)
50% (0)
其他回答 共 2 条
argv是变量名。不知道哪个环境定义了这种数据结构。
只看见int _tmain(int argc, _TCHAR* argv[]),
argv记录了命令行的命令。
回答者:Y_Snow - 秀才 三级 11-28 14:09
const char *const *argv
其实就是 char argv[][]
const 表示是argv常量只能定义时候附值
一般用于得到命令行参数
程序test
int main( int argc, char** argv )
命令行
test -1 -2 -3
argc 等于 4
argv[0] 等于字符串 "test "
argv[0][0]等于字符't'
argv[0][1]等于字符'e'
argv[0][2]等于字符's'
argv[0][3]等于字符't'
argv[1] 等于 "-1"
argv[1][0]等于字符'-'
argv[1][1]等于字符'1'
argv[2] 等于 "-2"
argv[2][0]等于字符'-'
argv[2][1]等于字符'2'
argv[3] 等于 "-3"
argv[3][0]等于字符'-'
argv[3][1]等于字符'3'
回答者:topofyou - 见习魔法师 三级 11-28 16:11