const char *p;和char * const p的区别】的更多相关文章

解决该问题的方法:使用strcpy函数进行字符串拷贝   原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 和 #include <stdio.h> 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串. 返回指向dest的指针.   // testArray.cpp…
const char *p和char const *p是一样的,都表示定义一个指向字符常量的指针,指针的内容(字符)不可变.char * const p表示一个指向字符的指针常量,字符可以改变,但是指针指向的地址不可变.…
原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("ABCDEF12345"); 结果提示: F:\Users\denggelin\Documents\qtduojicheng\main.cpp:31: error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12…
const char *p;       const修饰*p,所以*p是一个常量,不可修改. char* const p; const修饰p,所以指针p是一个常量,不可修改. #include<iostream> using namespace std; int main(void) { const char *p; p="I Love ShangHai"; while(p) { if(*p=='L') *p='l';//编译不能通过.error:表达式左值必须是可修改的值…
char * p = "abc"与const char *p = "abc"的区别是什么呢? 第一个语句会产生问题: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 此时我们只需要改成第二个用法警告就消失了,这是为什么呢? 我们来分别理解以下两个语句,首先要清楚的是char * p语句定义的p是一个指针变量,假设我们用的是第一个语句,那么我们所表达的意思…
一:std:编译器错误解决 二:错误提示 "std::string::find_first_of(char const*, unsigned long, unsigned long) const", referenced from:      split_string(std::string const&, std::string const&) in libopencv_core.a(cmdparser.o)  "std::string::find_firs…
const *char p和char const *p,const char*p的区别 char*const p——p必须初始化,且不能指向别处,即p是指针常量: char const*p——p指向的内容不能改变,即指向的目标是常量: const char*p——同上.…
对于每个做C/C++的伙伴来说,面试中少不了关于const 的考察,尤其是对于刚毕业的新人. 今天听见同事在讨论这个问题,就随手写一下自己的理解.希望对大家又所帮助. 首先来说一下char *ptr: const char *ptr,和char const *ptr作用一样,因为const 后修饰的都是 *ptr,也就是说 *ptr是常类型.不能修改,说白了就是不能通过*ptr修改值.可以直接通过str变量来修改str的值,但是确不能通过ptr指针来修改. char *const ptr,con…
转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove("asd"); 编译报错 error C2664: "ATL::CStringT<BaseType,StringTraits>::Remove": 不能将参数 1 从"const char [4]"转换为"char" error…
直接将const char *赋值给char *是错误的,编译器不允许这种操作. #include "stdio.h" #include "string.h" int main() { //方式1 strcpy //方式1.1 //const char *cpCh = "const char"; //char ch[64]={0}; //char *pCh = ch; //是不是画蛇添足啊?? //strcpy(pCh, cpCh); //方式1…
一.char,char*,char a[], char *a[], char **s 的区别与联系 C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串. 可以理解为在内存中连续存储的字符. 从实用主义而言,我们先给出结论. 我们会用到的一般有两种. · 声明一个字符串:char* a = "abcdefg": · 声明一组字符串:char* a[] = {"China","French","America",&quo…
首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * p和int * const p的不同 对于这种问题,我们只用将const 的位置固定,然后再看后面的东西,一般规则是后面的东西不能在进行赋值或者修改.例如下面: #include<stdio.h> int main(int argc,char *argv[]) { int i = 10; int…
char *c和char c[]区别 问题引入:在实习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确.程序演示: #include <iostream>using namespace std; main(){char *c1 = "abc";char c2[] = "abc";char *c3 = ( char* )…
本文只是一篇学习笔记,是看了<彻底搞定C指针>中的相关篇幅后的一点总结,仅此而已! 一.先搞清const int *p与int const *p的区别 它们的区别就是:没有区别!! 无论谁在前面都没有影响!所以const int *p与int const *p用法一样! 二.const int *p的用法 #include <stdlib.h> #include <stdio.h> #include <string.h> int main(int argc,…
1.以字符串形式出现的,编译器会在结尾自动添加\0,思考,为什么? 存在的C语言方法,如strlen(s),计算字符串的长度,其中s指针.strlen要计算字符串长度,必须知道哪里是结尾,因此使用\0表示结尾.只有字符数组才有\0的概念,其它类型(int)的数组没有这个概念.因为其他类型的数组或者指针,没有strlen这种方法. 那么问题来了,int数组如何计算长度呢?如int a1 = {3,7,9,}; 使用sizeof(a1)/sizeof(int). 2.数组可以在栈上分配,也可以在堆上…
Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in XXX ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)   如果真机调试就是 undefined sy…
char s[] = "wangshihui"; char *s = "wangshihui"; 皆宣告了s字符串,在C-style string的函数皆可使用,但两者背后意义却不相同. char s[] = "wangshihui";   s指向栈内存 的s是个char array,含11个byte(包含结尾\0),"wangshihui"对s来说是initializer,将字符一个一个地copy进s阵列. char *s …
char str[] = "abcd";定义了一个局部字符数组,返回它的地址肯定是一个已经释放了的空间的地址. 此函数返回的是内部一个局部字符数组str的地址,且函数调用完毕后 此数组被销毁,所以返回的指针也就指向一块被销毁的内存,这种写法得不到想要的结果,是错误的. char* get_str(void) { char *str = "abcd"; return str; } char* str = "abcd";表示先定义个字符串常量,存储在…
char* get_str(void) { char str[] = {"abcd"}; return str; } char str[] = {"abcd"};定义了一个局部字符数组,尽管是数组,但它是一个局部变量,返回它的地址肯定是一个已经释放了的空间的地址.此函数返回的是内部一个局部字符数组str的地址,且函数调用完毕后此数组被销毁,所以你返回的指针也就指向一块被销毁的内存,这种写法是错误的. char* get_str(void) { char *str =…
指针和数组存在着一些本质的区别.当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作 为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上,两者是有区别的.请看以下的例子: char a[] = "1234567"; char *p = "1234567"; 上述两个变量的内存布局分别如下: 数组a需要在内存中占用8个字节的空间,这段内存区通过名字a来标志.指针p则需要4个…
[转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * const myPtr = &char_A;//指向常量的常量指针 下面依次对这三种类型进行介绍. 因为*操作符是左操作符,左操作符的优先级是从右到左,对于…
原因 刚好看到给main传递参数,书上(C++Primer)说“ int main(int argc, char *argv[])也可以写成 int main(int argc, char **argv),argv 是 C风格字符串数组 ”. 然后各种别扭,感觉有什么没弄明白(最怕这样,不知道自己不知道什么). 于是敲敲写写,当敲到 char c='x'; char *pc=&c; 的时候突然回过神来,原来char **argv=&pc; 的时候,argv 可不是 C风格字符串数组 ! c…
const修饰类的成员函数 const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当const修饰类的成员函数时,成员函数有什么特点.https://www.cnblogs.com/cthon/p/9166715.html 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员…
int xfun(int *a,int n) { int x = *a;//a的类型是int *,a+1跳动一个int的长度 ; pa < a + n; pa++)//指向同一个类型的指针比较大小,相减是两者之间的元素个数 { //string s = pa - a;// string接受const char*的单参构造函数不是explicit的,但编译器不能把int转换为string类型 decltype(pa - a) t; ][]; decltype(arr) Type; float f…
1,基本语法 1,定义一个char字符: char hehe='a'; //单引号 2,定义一个由char字符组成的数组: char daqing[] = "abcd"; char daqing[] = { 'a','b','c','d' }; //两个效果一样,这两个都是和字符相关的实体,不是指针,但是因为是数组,数组的取值规则是,存储第一个元素的地址,依次向后遍历直到找到\0,所以,daqing这个变量是地址(尽管存储的是地址,但是daqing不是指针类型,是实体),它指向字符a,…
总结一下遇到的关于char *p.char p[]和字符串的题目: 例一:(指针的指针) 1 void getmemory(char **p) 2 { 3 p = (char *)malloc(100); //p应该是*p,因为这里是对传入的二重指针所指向的内容分配空间,而不是二重指针的地址, 4 //所以应该为 *p = (char*)malloc(100); 5 } 6 7 int main() 8 { 9 char *str = NULL; 10 getmemory(str); //这里应…
VS2008, 写一个简单的demo的时候出现了这个: 1>------ Build started: Project: GetExportTable, Configuration: Release Win32 ------1>Compiling...1>main.cpp1>e:\tzcode\getexporttable\getexporttable\GetExportTable.h(61) : warning C4996: 'scanf': This function or v…
http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用):xml类型查找某个节点的数据有哪些方法,哪个效率高:使用存储 过程和使用T-SQL查询数据有啥不一样: ------------------------------------------------ SQL中char.varchar.nchar.nvarchar的区别 http://www.cn…
写作日期:2016.08.31 修改日期:2016.09.01 .2016.09.02. 交流qq:992591601 用了几天时间复习了下C语言.对于C语言的字符串操作有些不习惯,于是作为练习,写下了下面这样错误的程序: #include <stdio.h> #define MAX_STR_SIZE 100 void copy_string(char* from, char* to) { while (*to++ = *from++); } void swap_strs(char* str1…
看看下面的程序的输出: #include <stdio.h>char *returnStr(){    char *p="hello world!";    return p;}int main(){    char *str=NULL;//一定要初始化,好习惯     str=returnStr();    printf("%s\n", str);       return 0;} 这个没有任何问题,因为"hello world!"…