c语言问题,这些函数后边跟个const 啥意思 求解 C语言链表问题,函数形参加const修饰后为什么还可以被修改...

\u6c42\u52a9\u4e00\u4e2aC\u8bed\u8a00\u95ee\u9898\uff0c\u5173\u4e8e\u51fd\u6570\u91ccconst\u5f62\u53c2\u7684

\u58f0\u660e\u4e3a const\u7684\u5f62\u53c2\uff0c \u5b83\u5728\u51fd\u6570\u4f53\u5185\u53ea\u53ef\u4ee5\u505a\u201c\u53f3\u503c\u201d\uff0c\u4e0d\u80fd\u505a \u201c\u5de6\u503c", \u5373\uff0c\u5b83\u7684\u503c\u4e0d\u5141\u8bb8\u88ab\u6539\u53d8\u3002
\u4f8b\u5982\u8fd9\u4e2a\u662f\u6b63\u786e\u7684\uff1a
#include
int fun(const int x){
return x*10;
}
main(){
int i;
for (i=1;i<5;i++) printf("%d ",fun(i));
}
\u4f8b\u5982\u8fd9\u4e2a\u662f\u9519\u7684\uff1a
int fun(const int x){
x=x*10; //\u9519\u5728\u8fd9\u91cc\uff0c\u7528\u4e3a\u5de6\u503c\u4e86\u3002
return x;
}

const LIST * p; \u8868\u793a p\u6240\u53ea\u60f3\u7684\u5185\u5b58\u4e0d\u80fd\u88ab\u4fee\u6539\uff1b
\u4f46\u662fp \u53ef\u4ee5\u6307\u5411\u5176\u4ed6\u5185\u5b58\uff1b
LIST * const p; \u8868\u793a p\u4e0d\u80fd\u6539\u53d8\u6307\u5411\uff0c\u5176\u6240\u6307\u5411\u7684\u5185\u5b58\u53ef\u4ee5\u88ab\u4fee\u6539\uff1b
\u6240\u4ee5\uff0c\u5982\u679c\u4e0d\u5e0c\u671bp\u88ab\u91cd\u65b0\u8d4b\u503c\u7684\u8bdd\uff0c \u5c31\u628a\u53c2\u6570\u6539\u4e3a\uff1a LIST * const p;
\u8fd9\u5c31\u662f\u6307\u9488\u5e38\u91cf\uff0c\u4e0e\u5e38\u91cf\u6307\u9488\u7684\u95ee\u9898\uff1b \u4f60\u53ef\u4ee5\u767e\u5ea6\u4e0b\uff1b\u6709\u89e3\u91ca\u7684\u66f4\u72e0\u660e\u767d

const 限定符,它把一个对象转换成一个常量。

1.》》const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)
2.》》const与指针和引用。
(a)const与指针。
先来看看下面的几种定义:

intme;
constint*p1=&me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向
int*constp2=&me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。
constint*constp3=&me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向

(b)指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。 引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。
(c)const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。
3.》》(a)const与函数。由于2(c),所以经常把函数的形参类型设为const,而且多为const 引用。但是这里有一个限制,不能把不是左值的地址传递给引用。(左值包括变量,数组元素,结构成员,引用,被解除引用的指针等)。 形参是const类型的,说明该函数将不会修改其值,该函数便为const函数。
(b)const与类成员函数。先看看下面这段代码:

constStockland=Stock("hyd");
land.show();

land 是常量,但是类成员函数show无法保证不修改land,所以编译器将拒绝执行该段代码。除非你能保证show像const函数一样,但这需要另外一种语法,即:
void show() const; //声明
void Stock::show() const{} //定义

void function() const{}
回到顶部
void function() const{}
通常我们会看到一些函数声明后面会跟着一个const,这个const是做什么的呢?
看一下下面的例子,就知道了。直接在编译前,就会提示下面的两个错误

// test1107.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class aa{
int num;
public:
aa(){
int b =10;
num = b;
};
void out1(){
cout<<num<<endl;
}
void out2() const{
cout<<num<<endl;
}
void out3() const{
num+=10; //出错,const函数不能修改其数据成员
cout<<num<<endl;
}

};
int _tmain(int argc, _TCHAR* argv[])
{
aa a1;
a1.out1();
a1.out2();
a1.out3();
const aa a2;
a2.out1(); // 错误,const的成员 不能访问非const的函数
a2.out2();
a2.out3();
return 0;
}

在类成员函数的声明和定义中,
const的函数不能对其数据成员进行修改操作。
const的对象,不能引用非const的成员函数。

这儿的const就是说这个函数操作不会对变量或是对象之类的值有影响 比如、有一个human类 ,现在要得到某个human类对象A的age 那么肯定是不会因为想得到这个值而改变了age的大小,那么就可以写一个函数int getAge()const这样就好 这么做是为了防止在函数中对不应该在这里改变的量不小心进行了改变

常成员函数..........不造嚒

  • 闂涓猚璇█鐨闂 鍏充簬鍑芥暟璋冪敤
    绛旓細caltime灏辨槸鑾峰彇鏈湴鏃堕棿 鍥犱负 localtime杩斿洖鐨勬槸TM缁撴瀯浣撶殑鎸囬拡, 灏遍渶瑕佺敤pt 鏌ユ煡2涓鍑芥暟灏辩煡閬撲簡:澶存枃浠秚ime.h 鍑芥暟鍚嶇О: localtime 鍑芥暟鍘熷瀷:struct tm *localtime(const time_t *timer)鍑芥暟鍔熻兘: 杩斿洖涓涓互tm缁撴瀯琛ㄨ揪鐨勬満鍣ㄦ椂闂翠俊鎭 鍑芥暟杩斿洖: 浠m缁撴瀯琛ㄨ揪鐨勬椂闂达紝缁撴瀯tm瀹氫箟濡備笅:...
  • 鍏充簬C璇█鐨勪竴涓鐩,濡傚浘,姹傚ぇ绁炶缁嗚В閲,璋㈣阿
    绛旓細include銆傘傘傞儴鍒嗘槸c璇█涓鐨勪竴浜涘簱锛屽鏋滀笉寮曠敤杩欎簺搴撳嚱鏁颁笅闈og()鍑芥暟鍜sqrt()鍑芥暟灏辨棤娉曚娇鐢紱double fun锛坕nt m锛夊畾涔変竴涓甫int 绫诲瀷鍙傛暟m锛屽嚱鏁鍚嶄负fun锛岃繑鍥炲肩被鍨嬩负duoble鐨勫嚱鏁帮紱涓嬮潰鏄嚱鏁扮殑鍐呭瀹氫箟int鍨嬪彉閲忎綔涓哄惊鐜殑璁℃暟鍣紝杩樺畾涔変簡涓涓猟ouble绫诲瀷鐨勫彉閲弒鍒濆鍊间负0.0锛岀敤浜庣疮鍔狅紱寰幆...
  • C璇█6涓湁瓒g殑闈㈣瘯棰
    绛旓細C璇█6涓湁瓒g殑闈㈣瘯棰 1銆乬ets()鍑芥暟 闂: 璇锋壘鍑轰笅闈唬鐮侀噷鐨闂銆傜瓟:涓婇潰浠g爜閲岀殑闂鍦ㄤ簬鍑芥暟gets()鐨勪娇鐢紝杩欎釜鍑芥暟浠巗tdin鎺ユ敹涓涓瓧绗︿覆鑰屼笉妫鏌ュ畠鎵澶嶅埗鐨勭紦瀛樼殑瀹圭Н锛岃繖鍙兘浼氬鑷寸紦瀛樻孩鍑恒傝繖閲屾帹鑽愪娇鐢ㄦ爣鍑嗗嚱鏁癴gets()浠f浛銆2銆乵ain()鐨勮繑鍥炵被鍨 闂:涓嬮潰鐨勪唬鐮佽兘缂栬瘧閫氳繃鍚? 濡傛灉鑳斤紝瀹...
  • c璇█,鍏充簬鍑芥暟閮ㄥ垎鍥燾璇█鐗堟湰浜х敓鐨闂
    绛旓細鍏充簬鍑芥暟璋冪敤鐨勬椂鍊欎紶鍙傛暟鏄粈涔堥『搴忥紝鐜颁唬鐨C璇█缂栬瘧鍣ㄩ兘绗﹀悎涓瀹氱殑鏍囧噯锛坱urbo c閭d釜骞翠唬鐨勪笢瑗库︹︿笉鐔燂紝涓嶅ソ璇达級銆傛瘮濡俖_stdcall锛坵indows api鍑芥暟鐢ㄧ殑璋冪敤鏂瑰紡锛夊拰__cdecl锛c璇█搴撳嚱鏁般乴inux涓嬬敤鐨勮皟鐢ㄦ柟寮忥級閮芥槸浠庡彸鍒板乏鐨勯『搴忎紶鍙傜殑锛屾澶栬繕鏈塤_fastcall锛宱penwatcom c缂栬瘧鍣ㄩ粯璁よ繕鏈夎嚜宸辩壒鏈...
  • c璇█涓鍏充簬杈撳嚭鍑芥暟鐨勪竴涓闂銆
    绛旓細鍘熷洜鍦ㄤ簬printf锛%d鏃惰姹俿igned int鍨嬫暟鎹傚鏋滀笉鏄紝灏辫杩涜杞崲銆傚洜涓篶har c瀹為檯涓婃槸 (signed) char c锛鏄湁绗﹀彿鐨锛宑=0362鍏跺疄灏辨槸-2鐨勫叓杩涘埗琛ㄧず(涓涓瓧鑺傦級銆俻rintf("%d", c);瑕佹眰鍚庨潰鏄湁绗﹀彿鐨勬暣鏁帮紝鎵浠ヨ鍏堝皢c杞负鏈夌鍙风殑鏁村瀷锛屽嵆F2 FF FF FF锛堝皬绔簭 small endian)锛夈傝繖閲屽洜涓...
  • 闂嚑涓狢璇█scanf鍑芥暟鍜printf鍑芥暟闂?
    绛旓細绗簩涓闂锛氬湪浣跨敤scanf()杈撳叆瀛楁瘝鏃讹紝瀛楁瘝鍜屽瓧姣嶄箣闂翠笉鑳芥湁绌烘牸鐨勶紙鍚﹀垯姣忎簩涓瓧绗﹀氨浼氳鍒扮┖鏍硷紝闄ら潪鍦ㄦ牸寮忎覆涓篃鍐欐槑绌烘牸锛夈傚瓧姣鍚庨潰閬囧埌鏁板瓧鍙互鐢ㄧ┖鏍奸殧寮锛岄亣鍒板瓧姣嶄笉鑳界敤绌烘牸闅斿紑鐨勩俿canf("%d%d",&x1,&x2);scanf("%c%c",&y1,&y2);姝g‘鐨勮緭鍏ユ牸寮忥紝绛旀鏄10绌烘牸20AB锛屼絾鏄繖涓瓟妗...
  • 鍏充簬C璇█鐨闂
    绛旓細= 3锛沠(h(c)),姝ゆ椂c=0 棣栧厛璋冪敤h(c)锛岃繑鍥1锛岃繑鍥鍚巆=0锛涘洜涓烘鏃朵紶鍏ュ弬鏁颁负int锛屽嚱鏁鍙傛暟涓篶har锛岃杩涜绫诲瀷杞崲锛屾杩囩▼浼氫骇鐢熷壇鏈紝鍗充骇鐢熶竴涓猚鐨勫壇鏈紝涓篶har绫诲瀷锛屾墍浠ユ鏃跺湪鍑芥暟浣撲腑淇敼c鐨勫壇鏈紝涓嶄細褰卞搷澶栭儴c鐨勫笺傚啀璋冪敤f(h(c))=f(1)锛岃繑鍥2锛岃繑鍥炲悗c=0 c+=f(h(c))=0+...
  • c璇█缂栧啓鐨鍑芥暟,鏈変釜涓鍑芥暟c鏂囦欢,涓涓嚱鏁癶鏂囦欢,涓涓瓙鍑芥暟c鏂囦欢,瀛...
    绛旓細姣旀柟璇达紝鎴戝啓涓涓獁ork鐨勫疄鐜帮細//work.h ifndef work_h define work_h //浣犱篃鍙互鍦ㄨ繖閲屽0鏄庡彉閲忥紝鎴栬呭畾涔夌被鍨嬨佺粨鏋勪綋 void work();//娉ㄦ剰杩欏彧鏄竴涓鍑芥暟澹版槑 endif //work.c //work鍑芥暟鐨勫畾涔夛紝鎴栬呰瀹炵幇 void work(){ //杩欓噷鎵嶇湡姝e疄鐜皐ork涓殑浠g爜 } 杩欐牱涓鏉ワ紝濡傛灉浣犳兂鐢╳ork.c涓...
  • 缂栧啓涓涓嚱鏁板悕涓篶ountc鍑芥暟,瑕佹眰濡備笅
    绛旓細缂栧啓涓涓狢绋嬪簭,杈撳叆涓涓瓧绗︿覆,璋冪敤countc鍑芥暟,杈撳嚭瀛楃涓蹭腑澶у啓瀛楁瘝鐨勪釜鏁癳mpressme123 | 娴忚1568 娆 |涓炬姤 鎴戞湁鏇村ソ鐨勭瓟妗堟帹鑽愪簬2017-12-16 15:26:10 鏈浣崇瓟妗 count[0-25]鍒嗗埆瀛樺偍A-Z澶у啓瀛楁瘝鐨勪釜鏁般 #include <stdio.h> int countc(char* instr, int count[]) { int index = 0; int i ...
  • 姹傚姪涓涓狢璇█闂 涓轰粈涔堝湪VC涓佹槸鎻愮ず鎴 warning C4101: 'c...
    绛旓細璀﹀憡鐨勬剰鎬濅负锛氳鍛C4101锛'e'锛氭湭寮曠敤鐨勫眬閮ㄥ彉閲 鍘熷洜鏄眬閮ㄥ彉閲忕殑閿欒浣跨敤銆備綘鐨 f锛宑锛k閮芥槸鍦╩ain锛堬級鍑芥暟閲岄潰瀹氫箟鐨勶紝鐒惰岋紝浣犲湪浣跨敤杩欎簺鍙橀噺鏃舵槸鍦╰emp锛堬級鍑芥暟閲岄潰锛屽湪鏌愪釜鍑芥暟閲岄潰瀹氫箟鐨勫彉閲忓彧鑳藉湪姝ゅ嚱鏁颁腑浣跨敤锛屾墍浠ヤ綘浼氫骇鐢熼敊璇傝В鍐冲姙娉曚负锛屽皢杩欎簺鍙橀噺瀹氫箟涓哄叏灞鍙橀噺銆闂鎴愬姛瑙e喅銆
  • 扩展阅读:c++编程 ... c语言必背100代码 ... c++中<< ... c#入门基础知识 ... c++库函数大全 ... c#基础知识面试 ... c#一般用来开发什么 ... c#程序员工资一般多少 ... c++函数大全及详解 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网